【macOS で PowerShell Core】PSFzf でコマンド履歴を曖昧検索する
普段 PowerShell Core と zsh を使い分けています。
zsh を使っていて便利だと思う点が 1つあります。 曖昧検索ツールの便利さです。 peco や fzf を導入することでコマンド履歴やパスなどの検索が超強化されます (私は peco を使っています)。
『PowerShell Core でも同じようなことできないかな…』
と思って調べてみるとありました(嬉)。 PSFzf という fzf のラッパーがあるみたいです。
– 画像引用: kelleyma49/PSFzf | Github
今回はこれを入れて、PowerShell Core を便利にしていきます。
※ちなみに今回は導入しませんでしたが、 poco という peco ベースの検索モジュールもあります
前提条件
macOS Big Sur(バージョン 11.5.2) で試しています。
PowerShell Core の情報は以下の通り。
> $PSVersionTable Name Value ---- ----- PSVersion 7.1.4 PSEdition Core GitCommitId 7.1.4 OS Darwin 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021… Platform Unix PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0
※ macOS の PowerShell Core 導入は以前ブログにしています
1. fzf のインストール
前提条件として fzf が使える必要があります。Githubの Installation を参考に導入しておきましょう。
macOS、Homebrew を使っているので以下コマンドで導入しました。
# インストール > brew install fzf # インストール後確認 > fzf --version 0.27.2 (brew)
PSFzf は fzf
コマンドを使用します。
Get-Command
を使って、PowerShell が fzf
コマンドを使用できるかチェックしましょう。
> Get-Command fzf* CommandType Name Version Source ----------- ---- ------- ------ Application fzf 0.0.0.0 /usr/local/bin/fzf Application fzf-tmux 0.0.0.0 /usr/local/bin/fzf-tmux
2. PSFzf のインストール
PowerShell Core にて以下コマンドを実行してインストールします。
Install-Module -Name PSFzf
▼ 確認
> Get-InstalledModule | ? Name -eq PSFzf Version Name Repository Description ------- ---- ---------- ----------- 2.2.9 PSFzf PSGallery A thin wrapper around Fzf…
3. 動作確認・カスタマイズ
$PROFILE (~/.config/powershell/Microsoft.PowerShell_profile.ps1
)
に設定を入れてカスタマイズしていきながら、動作確認していきます。
ファイルパスの検索
Ctrl + t
で カレントディレクトリ内ファイルパスの検索を行う設定を入れます。
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t'
▼ ファイルパスのインクリメンタル検索ができました
コマンド履歴の検索
Ctrl + r
で コマンド履歴の検索を行う設定を入れます。
Set-PsFzfOption -PSReadlineChordReverseHistory 'Ctrl+r'
▼ コマンド履歴のインクリメンタル検索ができました
検索画面の調整
FZF_DEFAULT_OPTS
環境変数の設定で補完画面を調整できます。
$env:FZF_DEFAULT_OPTS="--height 50% --layout=reverse"
▼ 例: 画面の高さ 50%、レイアウト反転
※ほか調整できる内容は fzf の Layout 項を参照ください
Tab 補完の強化
PowerShell Core の タブ補完を PSFzf に置き換えることが出来ます。
Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { Invoke-FzfTabCompletion }
▼ 例: "Get-C" で Tab を押してみました
おわりに
以上、PSFzf を導入してみました。 他にも便利な拡張をあればどんどん入れていきたいですね。